package com.todo.event.activity.application.entity.bo;

import com.todo.common.common.enums.BusinessSceneEnum;
import com.todo.event.activity.common.enums.*;
import lombok.Data;

import java.util.List;

/**
 * @author azhebuxing
 * @date 2025/1/7 13:16
 * @description
 */
@Data
public class EventDetailBO {

    /**
     * 主键
     */
    private Long id;
    /**
     * 事件code
     */
    private String eventCode;
    /**
     * 业务线
     */
    private BusinessSceneEnum businessLine;
    /**
     * 事件基础信息
     */
    private EventInfo eventInfo;
    /**
     * 事件字段配置
     */
    private List<EventField> eventFieldList;
    /**
     * 状态
     */
    private EventDetailStatusEnum status;
    /**
     * 创建人
     */
    private String createUser;
    /**
     * 最后更新人
     */
    private String lastUpdateUser;


    @Data
    public static class EventInfo {
        /**
         * 事件分类
         */
        private EventClassifyEnum eventClassify;
        /**
         * 事件类型
         */
        private EventTypeEnum eventType;
        /**
         * 事件名称
         */
        private String eventName;
        /**
         * 事件主题
         */
        private String topicName;
        /**
         * tag
         */
        private String tag;
        /**
         * 消费者名称
         */
        private String consumerName;
        /**
         * 队列类型
         */
        private EventActivityQueueType queueType;
        /**
         * 基础配置
         */
        private String baseConf;
        /**
         * 扩展配置
         */
        private String extraConf;
        /**
         * 事件规则
         */
        private String rule;
    }

    @Data
    public static class EventField {
        /**
         * 数据来源 Aviator规则引擎、QlExpress规则引擎、静态数值···
         */
        private EventFieldDataSourceEnum dataSource;
        /**
         * 转换方式 根据数据来源做策略
         */
        private String transfer;
        /**
         * 字段名称
         */
        private String fieldName;
        /**
         * 字段类型
         */
        private EventFieldTypeEnum fieldType;
        /**
         * 字段长度
         */
        private Integer fieldLength;
        /**
         * 字段描述
         */
        private String fieldDesc;
        /**
         * 是否唯一
         */
        private Boolean uniqueField;
        /**
         * 是否供外部选择
         */
        private Boolean output;
        /**
         * 选择操符
         */
        private List<SelectOperateEnum> selectOperate;
        /**
         * 选择类型 枚举、自定义
         */
        private EventFieldSelectTypeEnum selectType;
        /**
         * 枚举值 selectType = enums 时有值
         */
        private List<EnumValue> enumsValue;
    }

    @Data
    public static class EnumValue {
        private String key;
        private String desc;
    }
}
